package com.example.task.controller;

import com.example.task.service.TaskService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@Slf4j
@RestController
public class TaskController {
    
    @Autowired
    private TaskService taskService;

    /**
     * 请求controller层将service服务异步执行
     */
    @GetMapping("/task1")
    public void task1(){
        log.info("========================task1 controller层开始============================");
        taskService.task1();
        log.info("========================task1 controller层结束============================");
    }

    /**
     * 请求controller层立刻返回前端,内部整个controller逻辑异步执行
     */
    @Async
    @GetMapping("/task2")
    public void task2(){
        log.info("========================task2 controller层开始============================");
        taskService.task2();
        log.info("========================task2 controller层结束============================");
    }

    /**
     * 此时taskService.task3 内@Async修饰的方法和调用方在同一个类中不生效
     */
    @GetMapping("/task3")
    public void task3(){
        log.info("========================task3 controller层开始============================");
        taskService.task3();
        log.info("========================task3 controller层结束============================");
    }

    /**
     * @Async 可以嵌套
     */
    @GetMapping("/task4")
    public void task4(){
        log.info("========================task4 controller层开始============================");
        taskService.task4();
        log.info("========================task4 controller层结束============================");
    }
}
